import tkinter as tk
import tensorflow as tf
import numpy as np

# 创建 TensorBoard 回调 本地浏览器网址http://localhost:6006/
# tensorboard_callback = tf.keras.callbacks(log_dir='3/4/logs', histogram_freq=1)

# 创建按钮来触发预测
def predict():
    global inputs, labels
    # 获取输入数据 转浮点类型
    inputs = np.array([float(x) for x in input_entry.get().split(',')], dtype=np.float32)
    labels = np.array([float(x) for x in output_entry.get().split(',')], dtype=np.float32)
    # 创建模型
    model = tf.keras.Sequential([
        tf.keras.layers.Dense(units=1, input_shape=[1])
    ])
    # 编译模型
    model.compile(loss='mean_squared_error', optimizer='sgd')
    # # 训练模型
    # model.fit(inputs, labels, epochs=10, verbose=1, callbacks=[tensorboard_callback])
    model.fit(inputs, labels, epochs=10, verbose=1)
    # 获取输入数据 转浮点类型
    test_input = float(test_entry.get())
    # 进行预测
    prediction = model.predict([test_input])
    # 显示结果
    result_label.config(text=f"如果输入 {test_input}，预测结果为：{prediction[0][0]}")

# 创建 Tkinter 窗口
root = tk.Tk()
root.title("TensorFlow 线性回归示例")
# 创建标签来显示预测结果
result_label = tk.Label(root, text="")
result_label.pack()
# 创建标签和输入框
tk.Label(root, text="输入数字：").pack()
input_entry = tk.Entry(root)
input_entry.pack()
input_entry.insert(0, "1, 2, 3, 4")
# 创建标签和输入框
tk.Label(root, text="输出数据：").pack()
output_entry = tk.Entry(root)
output_entry.pack()
output_entry.insert(0, "2, 4, 6, 8")
# 创建测试数据输入框
tk.Label(root, text="测试数据：").pack()
test_entry = tk.Entry(root)
test_entry.insert(0, "5")
test_entry.pack()
# 开始按钮
predict_button = tk.Button(root, text="开始训练", command=predict)
predict_button.pack()

root.mainloop()